์ํฌํ๋ก์ฐ, ํด๋ง, ์ฝ๋ ํ์ง์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ก ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ๋ง์คํฐํ์ธ์. ๊ธ๋ก๋ฒ ํ์ ํ์ ๊ณผ ํจ์จ์ฑ์ ํฅ์์ํต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก: ์ต์ ์ํฌํ๋ก์ฐ ๊ตฌํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ํ ์คํฌ๋ฆฝํ ์ธ์ด์์ ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ , ๋ชจ๋ฐ์ผ ์ฑ, ์ฌ์ง์ด ์๋ฒ ์ฌ์ด๋ ์๋ฃจ์ ๊น์ง ๊ตฌ์ถํ๋ ๊ฐ๋ ฅํ ์ธ์ด๋ก ๋ฐ์ ํ์ต๋๋ค. ์ด๋ฌํ ๋ฐ์ ์ผ๋ก ์ธํด, ํนํ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ํ ๋ด์์ ์ฝ๋ ํ์ง, ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ต์ ๊ฐ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๋ ๊ฒ์ด ํ์์ ์ด ๋์์ต๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์ํฌํ๋ก์ฐ ๊ตฌํ์ ํต์ฌ ์ธก๋ฉด์ ํ๊ตฌํ๋ฉฐ ๋ชจ๋ ์์ค์ ๊ฐ๋ฐ์์๊ฒ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
1. ์ต์ ECMAScript ํ์ค ์์ฉํ๊ธฐ
ECMAScript(ES)๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์คํ๋ ์ฌ์์ ๋๋ค. ์ต์ ES ๋ฒ์ ์ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ฌํญ์ ํ์ฉํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํฅ์๋ ๊ตฌ๋ฌธ: ES6(ES2015)๋ ํ์ดํ ํจ์, ํด๋์ค, ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด, ๊ตฌ์กฐ ๋ถํด ํ ๋น๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๋์ ํ์ฌ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ ์๊ฒ ๋ง๋ค์์ต๋๋ค.
- ๊ฐํ๋ ๊ธฐ๋ฅ: ์ดํ ES ๋ฒ์ ์์๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ํ async/await, ์ต์ ๋ ์ฒด์ด๋, ๋ ๋ณํฉ ์ฐ์ฐ์ ๊ฐ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ: ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ก์ด ES ๊ธฐ๋ฅ์ ์ต์ ํ๋์ด ์์ด ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
1.1 Babel์ ์ฌ์ฉํ ํธ๋์คํ์ผ๋ง
์ต์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ถ๋ถ์ ES ๊ธฐ๋ฅ์ ์ง์ํ์ง๋ง, ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ ๊ทธ๋ ์ง ์์ ์ ์์ต๋๋ค. Babel์ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๊ตฌํ ํ๊ฒฝ์์๋ ์คํํ ์ ์๋ ํ์ ํธํ ๋ฒ์ ์ผ๋ก ๋ณํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํธ๋์คํ์ผ๋ฌ์ ๋๋ค. ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํ ๋๊ตฌ์ ๋๋ค.
์์ Babel ์ค์ (.babelrc ๋๋ babel.config.js):
module.exports = {
presets: [
['@babel/preset-env', {
targets: {
browsers: ['> 0.25%', 'not dead']
}
}]
]
};
์ด ์ค์ ์ ์์ฅ ์ ์ ์จ 0.25% ์ด์์ธ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์์ผ๋ก ํ๋ฉฐ, ๋ ์ด์ ์ง์๋์ง ์๋ ๋ธ๋ผ์ฐ์ ๋ ์ ์ธํฉ๋๋ค.
1.2 ES ๋ชจ๋ ์ฌ์ฉํ๊ธฐ
ES ๋ชจ๋(import ๋ฐ export)์ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ณต์ ํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ธฐ์กด CommonJS ๋ชจ๋(require)์ ๋นํด ๋ช ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค:
- ์ ์ ๋ถ์: ES ๋ชจ๋์ ์ ์ ์ผ๋ก ๋ถ์ํ ์ ์์ด ํธ๋ฆฌ ์์ดํน(์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ) ๋ฐ ๊ธฐํ ์ต์ ํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๋น๋๊ธฐ ๋ก๋ฉ: ES ๋ชจ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋ ์ ์์ด ํ์ด์ง ๋ก๋ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๊ฐ๋
์ฑ ํฅ์:
import๋ฐexport๊ตฌ๋ฌธ์ ์ผ๋ฐ์ ์ผ๋กrequire๋ณด๋ค ๊ฐ๋ ์ฑ์ด ๋ ์ข๋ค๊ณ ์ฌ๊ฒจ์ง๋๋ค.
์์ ES ๋ชจ๋:
// my-module.js
export function greet(name) {
return `Hello, ${name}!`;
}
// app.js
import { greet } from './my-module.js';
console.log(greet('World')); // Output: Hello, World!
2. ๋ชจ๋์ ์ํคํ ์ฒ ์ฑํ
๋ชจ๋์ ์ํคํ ์ฒ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์๊ณ ๋ ๋ฆฝ์ ์ธ ๋ชจ๋๋ก ๋ถํดํ๋ ์ค๊ณ ์์น์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ๋ฌ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ฝ๋ ๊ตฌ์ฑ ๊ฐ์ : ๋ชจ๋์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์บก์ํํ์ฌ ์ดํดํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ: ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด๋ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ฌ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ ํฅ์: ๋ชจ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์์ด ๋ฒ๊ทธ๋ฅผ ์๋ณํ๊ณ ์์ ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ํ์ ๊ฐ์ : ํ๋ค์ด ์๋ก ๋ฐฉํดํ์ง ์๊ณ ๋์์ ๋ค๋ฅธ ๋ชจ๋์์ ์์ ํ ์ ์์ต๋๋ค.
2.1 ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ (ํ๋ก ํธ์๋์ฉ)
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ ๋ชจ๋์ฑ์ ์ํ ์ธ๊ธฐ ์๋ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. React, Angular, Vue.js์ ๊ฐ์ ํ๋ ์์ํฌ๋ ์ปดํฌ๋ํธ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค.
์์ (React):
import React from 'react';
function Greeting(props) {
return <h1>Hello, {props.name}!</h1>;
}
export default Greeting;
2.2 ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ (๋ฐฑ์๋์ฉ)
๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ์๋ก ํต์ ํ๋ ์๊ณ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ค๋ก ๊ตฌ์ฑ๋๋ ๋ชจ๋์ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ด ์ํคํ ์ฒ๋ ํนํ ํฌ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
3. ์ฌ๋ฐ๋ฅธ ํ๋ ์์ํฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ค์ํ ๋ชฉ์ ์ ์ํ ๊ด๋ฒ์ํ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์์ ์ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๊ฒ์ ์์ฐ์ฑ์ ๊ทน๋ํํ๊ณ ํ๋ก์ ํธ์ ์ฑ๊ณต์ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ์ต์ ์ ๋๋ค:
- React: ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ์ ์ธ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ์ ๊ฐ์ DOM์ผ๋ก ์ ๋ช ํฉ๋๋ค. Facebook, Instagram, Netflix์ ๊ฐ์ ํ์ฌ์์ ์ ์ธ๊ณ์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
- Angular: ๋ณต์กํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ํฌ๊ด์ ์ธ ํ๋ ์์ํฌ์ ๋๋ค. Google์ด ๊ฐ๋ฐํ Angular๋ ์์กด์ฑ ์ฃผ์ ๋ฐ ํ์ ์คํฌ๋ฆฝํธ ์ง์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌ์กฐํ๋ ๊ฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. Google, Microsoft, Forbes์ ๊ฐ์ ํ์ฌ๋ค์ด Angular๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Vue.js: ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ์ ์ง์ ํ๋ ์์ํฌ์ ๋๋ค. Vue.js๋ ๋จ์์ฑ๊ณผ ์ฌ์ฉ ์ฉ์ด์ฑ์ผ๋ก ์ ๋ช ํ์ฌ ์๊ท๋ชจ ๋ฐ ๋๊ท๋ชจ ํ๋ก์ ํธ ๋ชจ๋์ ์ข์ ์ ํ์ ๋๋ค. Alibaba, Xiaomi, GitLab์ด Vue.js๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Node.js: ์๋ฒ ์ฌ์ด๋์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ์ ๋๋ค. Node.js๋ API, ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ , ๋ช ๋ น์ค ๋๊ตฌ ๊ตฌ์ถ์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. Netflix, LinkedIn, Uber๊ฐ ์ฃผ์ Node.js ์ฌ์ฉ์์ ๋๋ค.
- Express.js: Node.js๋ฅผ ์ํ ์ต์ํ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ ๋๋ค. Express.js๋ ์น ์๋ฒ์ API๋ฅผ ๊ตฌ์ถํ๋ ๊ฐ๋จํ๊ณ ์ ์ฐํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ ์ ๊ณ ๋ ค์ฌํญ:
- ํ๋ก์ ํธ ์๊ตฌ์ฌํญ: ํ๋ก์ ํธ์ ๊ตฌ์ฒด์ ์ธ ์๊ตฌ์ฌํญ์ ๋ฌด์์ ๋๊น?
- ํ ์ ๋ฌธ์ฑ: ํ์ด ์ด๋ฏธ ์ต์ํ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฌด์์ ๋๊น?
- ์ปค๋ฎค๋ํฐ ์ง์: ํด๋น ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํฌ๊ณ ํ๋์ ์ธ ์ปค๋ฎค๋ํฐ๊ฐ ์์ต๋๊น?
- ์ฑ๋ฅ: ๋ค์ํ ์กฐ๊ฑด์์ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
- ํ์ฅ์ฑ: ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ์ฅ์ ๊ฐ๋นํ ์ ์์ต๋๊น?
4. ๊น๋ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์ฝ๋ ์์ฑ
ํด๋ฆฐ ์ฝ๋๋ ์ฝ๊ณ , ์ดํดํ๊ณ , ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋์ ๋๋ค. ํด๋ฆฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ํนํ ํ์ผ๋ก ์์ ํ ๋ ์ฅ๊ธฐ์ ์ธ ํ๋ก์ ํธ ์ฑ๊ณต์ ํ์์ ์ ๋๋ค.
4.1 ์ฝ๋ฉ ์ปจ๋ฒค์ ๋ฐ๋ฅด๊ธฐ
์ฝ๋ฉ ์ปจ๋ฒค์ ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ท์ ํ๋ ์ผ๋ จ์ ๊ท์น์ ๋๋ค. ์ผ๊ด๋ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ณ ๋ค๋ฅธ ๊ฐ๋ฐ์์์ ํ์ ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ด๋ฆ ์ง์ ๊ท์น: ๋ณ์, ํจ์, ํด๋์ค์ ๋ํด ์ค๋ช
์ ์ด๊ณ ์ผ๊ด๋ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์๋ฅผ ๋ค์ด, ๋ณ์์ ํจ์์๋
camelCase(์:firstName,calculateTotal)๋ฅผ ์ฌ์ฉํ๊ณ ํด๋์ค์๋PascalCase(์:UserAccount)๋ฅผ ์ฌ์ฉํ์ธ์. - ๋ค์ฌ์ฐ๊ธฐ: ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์ผ๊ด๋ ๋ค์ฌ์ฐ๊ธฐ(์: 2์นธ ๋๋ 4์นธ ๊ณต๋ฐฑ)๋ฅผ ์ฌ์ฉํ์ธ์.
- ์ฃผ์: ๋ณต์กํ๊ฑฐ๋ ๋ช ํํ์ง ์์ ์ฝ๋๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ฃผ์์ ์์ฑํ์ธ์. ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง์ถฐ ์ฃผ์์ ์ต์ ์ํ๋ก ์ ์งํ์ธ์.
- ์ค ๊ธธ์ด: ๊ฐ๋ก ์คํฌ๋กค์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค ๊ธธ์ด๋ฅผ ํฉ๋ฆฌ์ ์ธ ๋ฌธ์ ์(์: 80์ ๋๋ 120์)๋ก ์ ํํ์ธ์.
4.2 ๋ฆฐํฐ(Linter) ์ฌ์ฉํ๊ธฐ
๋ฆฐํฐ๋ ์ฝ๋์ ์คํ์ผ ์๋ฐ ๋ฐ ์ ์ฌ์ ์ค๋ฅ๋ฅผ ์๋์ผ๋ก ํ์ธํ๋ ๋๊ตฌ์ ๋๋ค. ๋ฆฐํฐ๋ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ๊ฐ์ ํ๊ณ ๊ฐ๋ฐ ๊ณผ์ ์ด๊ธฐ์ ๋ฒ๊ทธ๋ฅผ ์ก๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ESLint๋ ์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฆฐํฐ์ ๋๋ค.
์์ ESLint ์ค์ (.eslintrc.js):
module.exports = {
env: {
browser: true,
es2021: true,
node: true
},
extends: [
'eslint:recommended',
'plugin:react/recommended'
],
parserOptions: {
ecmaFeatures: {
jsx: true
},
ecmaVersion: 12,
sourceType: 'module'
},
plugins: [
'react'
],
rules: {
'no-unused-vars': 'warn',
'react/prop-types': 'off'
}
};
4.3 ์ฝ๋ ๋ฆฌ๋ทฐ
์ฝ๋ ๋ฆฌ๋ทฐ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ฉ์ธ ์ฝ๋๋ฒ ์ด์ค์ ๋ณํฉํ๊ธฐ ์ ์ ๊ฒํ ํ๋ ๊ณผ์ ์ ๋๋ค. ์ฝ๋ ๋ฆฌ๋ทฐ๋ ๋ฒ๊ทธ๋ฅผ ์ก๊ณ , ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ฉฐ, ์ฝ๋ ํ์ง์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ํ ์ง์ ๊ณต์ ์ ๋ฉํ ๋ง์ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
5. ํจ๊ณผ์ ์ธ ํ ์คํธ ์์ฑ
ํ ์คํ ์ ์ํํธ์จ์ด ๊ฐ๋ฐ ๊ณผ์ ์ ํ์์ ์ธ ๋ถ๋ถ์ ๋๋ค. ํจ๊ณผ์ ์ธ ํ ์คํธ๋ฅผ ์์ฑํ๋ฉด ์ฝ๋๊ฐ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ๊ณ ํ๊ท(regression)๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ์ ํ์ ํ ์คํธ๊ฐ ์์ต๋๋ค:
- ๋จ์ ํ ์คํธ: ์ฝ๋์ ๊ฐ๋ณ ๋จ์(์: ํจ์, ํด๋์ค)๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ํ ์คํธํฉ๋๋ค.
- ํตํฉ ํ ์คํธ: ์ฝ๋์ ๋ค๋ฅธ ๋จ์๋ค์ด ์๋ก ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง ํ ์คํธํฉ๋๋ค.
- ์๋ ํฌ ์๋ ํ ์คํธ: ์ฌ์ฉ์ ๊ด์ ์์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํฉ๋๋ค.
5.1 ํ ์คํ ํ๋ ์์ํฌ ์ ํ
์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Jest: Facebook์ด ๊ฐ๋ฐํ ์ธ๊ธฐ ์๋ ํ ์คํ ํ๋ ์์ํฌ์ ๋๋ค. Jest๋ ์ฌ์ฉ ํธ์์ฑ๊ณผ ๋ชจํน(mocking), ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง์ ๊ฐ์ ๋ด์ฅ ๊ธฐ๋ฅ์ผ๋ก ์ ๋ช ํฉ๋๋ค.
- Mocha: ๋ค์ํ ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: Chai, Assert) ๋ฐ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: Sinon)์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์ ์ฐํ ํ ์คํ ํ๋ ์์ํฌ์ ๋๋ค.
- Jasmine: ํ ์คํธ ์์ฑ์ ์ํ ๊น๋ํ๊ณ ๊ฐ๋ ์ฑ ์๋ ๊ตฌ๋ฌธ์ ์ ๊ณตํ๋ ํ๋ ์ฃผ๋ ๊ฐ๋ฐ(BDD) ํ๋ ์์ํฌ์ ๋๋ค.
5.2 ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ (TDD)
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD)์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฝ๋๊ฐ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ๊ณ ๊ณผ๋ํ ์์ง๋์ด๋ง์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
6. CI/CD๋ก ์ํฌํ๋ก์ฐ ์๋ํํ๊ธฐ
์ง์์ ํตํฉ/์ง์์ ๋ฐฐํฌ(CI/CD)๋ ์ฝ๋ ํตํฉ์์ ๋ฐฐํฌ์ ์ด๋ฅด๊ธฐ๊น์ง ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ ์ผ๋ จ์ ๊ดํ์ ๋๋ค. CI/CD๋ ์ค๋ฅ ์ํ์ ์ค์ด๊ณ , ์ฝ๋ ํ์ง์ ํฅ์์ํค๋ฉฐ, ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
6.1 CI/CD ํ์ดํ๋ผ์ธ ์ค์
CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค:
- ์ฝ๋ ํตํฉ: ๊ฐ๋ฐ์๋ค์ด ๊ณต์ ์ ์ฅ์(์: Git)์ ์ฝ๋๋ฅผ ํตํฉํฉ๋๋ค.
- ๋น๋: CI/CD ์์คํ ์ด ์๋์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํฉ๋๋ค.
- ํ ์คํธ: CI/CD ์์คํ ์ด ์๋์ผ๋ก ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.
- ๋ฆด๋ฆฌ์ค: CI/CD ์์คํ ์ด ์๋์ผ๋ก ์คํ ์ด์ง ๋๋ ํ๋ก๋์ ํ๊ฒฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฆด๋ฆฌ์คํฉ๋๋ค.
6.2 ์ธ๊ธฐ ์๋ CI/CD ๋๊ตฌ
์ฌ๋ฌ CI/CD ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Jenkins: CI/CD๋ฅผ ํฌํจํ ๋ค์ํ ์์ ์ ์๋ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์คํ ์์ค ์๋ํ ์๋ฒ์ ๋๋ค.
- GitHub Actions: GitHub์ ํตํฉ๋ CI/CD ์๋น์ค์ ๋๋ค.
- GitLab CI/CD: GitLab์ ํตํฉ๋ CI/CD ์๋น์ค์ ๋๋ค.
- CircleCI: ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ CI/CD ํ๋ซํผ์ ๋๋ค.
- Travis CI: ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ CI/CD ํ๋ซํผ์ ๋๋ค (์ฃผ๋ก ์คํ ์์ค ํ๋ก์ ํธ์ฉ).
7. ์ฑ๋ฅ ์ต์ ํ
์ฑ๋ฅ์ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. ์ฑ๋ฅ์ ์ต์ ํํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ณ , ์๋ฒ ๋น์ฉ์ ์ค์ด๋ฉฐ, SEO๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค.
7.1 ์ฝ๋ ๋ถํ (Code Splitting)
์ฝ๋ ๋ถํ ์ ์ฝ๋๋ฅผ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ๋ฒ๋ค๋ก ๋๋๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
7.2 ์ง์ฐ ๋ก๋ฉ (Lazy Loading)
์ง์ฐ ๋ก๋ฉ์ ๋ฆฌ์์ค(์: ์ด๋ฏธ์ง, ๋น๋์ค, ๋ชจ๋)๊ฐ ํ์ํ ๋๋ง ๋ก๋ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
7.3 ์บ์ฑ
์บ์ฑ์ ์์ฃผ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํ์ฌ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์บ์ฑ์ ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์บ์ฑ: HTTP ํค๋๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ ์์ฐ(์: ์ด๋ฏธ์ง, CSS, ์๋ฐ์คํฌ๋ฆฝํธ)์ ์บ์ํ๋๋ก ์ง์ํฉ๋๋ค.
- ์๋ฒ ์ฌ์ด๋ ์บ์ฑ: ์๋ฒ ์ฌ์ด๋ ์บ์ฑ ๋ฉ์ปค๋์ฆ(์: Redis, Memcached)์ ์ฌ์ฉํ์ฌ ์์ฃผ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ํฉ๋๋ค.
- ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ (CDN): CDN์ ์ฌ์ฉํ์ฌ ์ ์ ์์ฐ์ ์ ์ธ๊ณ ์๋ฒ์ ๋ฐฐํฌํฉ๋๋ค. ์ด๋ ๋ค๋ฅธ ์ง๋ฆฌ์ ์์น์ ์ฌ์ฉ์์ ๋ํ ์ง์ฐ ์๊ฐ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์๋ก๋ Cloudflare, AWS CloudFront, Akamai๊ฐ ์์ต๋๋ค.
7.4 ์ถ์(Minification) ๋ฐ ์์ถ(Compression)
์ถ์๋ ์ฝ๋์์ ๋ถํ์ํ ๋ฌธ์(์: ๊ณต๋ฐฑ, ์ฃผ์)๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์์ถ์ ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฝ๋๋ฅผ ์์ถํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ถ์์ ์์ถ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
8. ๊ตญ์ ํ(i18n) ๋ฐ ํ์งํ(l10n)
๊ธ๋ก๋ฒ ๊ณ ๊ฐ์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ ๊ตญ์ ํ(i18n)์ ํ์งํ(l10n)๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. i18n์ ์์ง๋์ด๋ง ๋ณ๊ฒฝ ์์ด ๋ค๋ฅธ ์ธ์ด ๋ฐ ์ง์ญ์ ๋ง๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์กฐ์ ํ ์ ์๋๋ก ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ํ๋ก์ธ์ค์ ๋๋ค. l10n์ ํน์ ์ธ์ด ๋ฐ ์ง์ญ์ ๋ง๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์กฐ์ ํ๋ ํ๋ก์ธ์ค์ ๋๋ค.
8.1 i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- i18next: ๋ค์ํ ํ์งํ ํ์๊ณผ ๊ธฐ๋ฅ์ ์ง์ํ๋ ์ธ๊ธฐ ์๋ i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- React Intl: React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ํน๋ณํ ์ค๊ณ๋ i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Globalize.js: ๋ค์ํ ์ซ์, ๋ ์ง, ํตํ ํ์์ ์ง์ํ๋ ํฌ๊ด์ ์ธ i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
8.2 ๋ ์ง ๋ฐ ์๊ฐ ํ์ ์ฒ๋ฆฌ
์ง์ญ๋ง๋ค ๋ค๋ฅธ ๋ ์ง ๋ฐ ์๊ฐ ํ์์ ์ฌ์ฉํฉ๋๋ค. i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ฐ๋ผ ๋ ์ง์ ์๊ฐ์ ํ์ํํ์ธ์.
8.3 ํตํ ํ์ ์ฒ๋ฆฌ
์ง์ญ๋ง๋ค ๋ค๋ฅธ ํตํ ํ์์ ์ฌ์ฉํฉ๋๋ค. i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ฐ๋ผ ํตํ ๊ฐ์ ํ์ํํ์ธ์.
8.4 ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ(RTL) ์ง์
์ผ๋ถ ์ธ์ด(์: ์๋์ด, ํ๋ธ๋ฆฌ์ด)๋ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์๋๋ค. CSS ๋ฐฉํฅ ์์ฑ ๋ฐ ๊ธฐํ ์ ์ ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด RTL ์ธ์ด๋ฅผ ์ง์ํ๋๋ก ํ์ธ์.
9. ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก
๋ณด์์ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํ ๊ด์ฌ์ฌ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ํนํ ์ฌ์ดํธ ๊ฐ ์คํฌ๋ฆฝํ (XSS) ๋ฐ ์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ(CSRF)์ ๊ฐ์ ํน์ ์ ํ์ ๊ณต๊ฒฉ์ ์ทจ์ฝํฉ๋๋ค.
9.1 XSS ๊ณต๊ฒฉ ๋ฐฉ์ง
XSS ๊ณต๊ฒฉ์ ๊ณต๊ฒฉ์๊ฐ ์น ํ์ด์ง์ ์ ์ฑ ์ฝ๋๋ฅผ ์ฃผ์ ํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ํด ์คํ๋๊ฒ ํ ๋ ๋ฐ์ํฉ๋๋ค. XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ค๋ฉด:
- ์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ ์ ์ (Sanitize): ์น ํ์ด์ง์ ํ์ํ๊ธฐ ์ ์ ํญ์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ์ ํด์ผ ํฉ๋๋ค. ์ด๋ ์ฝ๋๋ก ํด์๋ ์ ์๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์ด์ค์ผ์ดํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
- ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP) ์ฌ์ฉ: CSP๋ ์น ํ์ด์ง์์ ๋ก๋ํ ์ ์๋ ๋ฆฌ์์ค(์: ์คํฌ๋ฆฝํธ, ์คํ์ผ์ํธ, ์ด๋ฏธ์ง)๋ฅผ ์ ์ดํ ์ ์๋ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ์ถ๋ ฅ ๊ฐ ์ด์ค์ผ์ดํ: HTML๋ก ๋ ๋๋งํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ์ธ์.
9.2 CSRF ๊ณต๊ฒฉ ๋ฐฉ์ง
CSRF ๊ณต๊ฒฉ์ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์๋ฅผ ์์ฌ ์ฌ์ฉ์์ ์ง์์ด๋ ๋์ ์์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ์ ์ํํ๊ฒ ํ ๋ ๋ฐ์ํฉ๋๋ค. CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ค๋ฉด:
- CSRF ํ ํฐ ์ฌ์ฉ: CSRF ํ ํฐ์ ์์ฒญ์ด ์ฌ์ฉ์๋ก๋ถํฐ ์จ ๊ฒ์ธ์ง ํ์ธํ๊ธฐ ์ํด ์์ฒญ์ ํฌํจ๋๋ ๊ณ ์ ํ๊ณ ์์ธก ๋ถ๊ฐ๋ฅํ ๊ฐ์ ๋๋ค.
- SameSite ์ฟ ํค ์ฌ์ฉ: SameSite ์ฟ ํค๋ ์ฟ ํค๋ฅผ ์ค์ ํ ๋์ผํ ์ฌ์ดํธ๋ก๋ง ์ ์ก๋๋ ์ฟ ํค์ ๋๋ค. ์ด๋ CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
9.3 ์์กด์ฑ ๋ณด์
- ์์กด์ฑ ์ ๊ธฐ์ ๊ฐ์ฌ: `npm audit` ๋๋ `yarn audit`๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ ์์กด์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ์์ ํ์ธ์.
- ์์กด์ฑ ์ต์ ์ํ ์ ์ง: ๋ณด์ ์ทจ์ฝ์ ์ ํจ์นํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ์์กด์ฑ์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ธ์. ์๋ํ๋ ์์กด์ฑ ์ ๋ฐ์ดํธ ๋๊ตฌ ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.
- ์ํํธ์จ์ด ๊ตฌ์ฑ ๋ถ์ (SCA) ๋๊ตฌ ์ฌ์ฉ: SCA ๋๊ตฌ๋ ์ํํธ์จ์ด์ ์คํ ์์ค ๊ตฌ์ฑ ์์๋ฅผ ์๋์ผ๋ก ์๋ณํ๊ณ ๋ถ์ํ์ฌ ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ ํ์ํฉ๋๋ค.
10. ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
๋ชจ๋ํฐ๋ง๊ณผ ๋ก๊น ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๋ชจ๋ํฐ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์ํ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ถ์ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๋ก๊น ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
10.1 ๋ก๊น ํ๋ ์์ํฌ ์ฌ์ฉ
๋ก๊น ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ์ธ์. ์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก๊น ํ๋ ์์ํฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Winston: ์ ์ฐํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ก๊น ํ๋ ์์ํฌ์ ๋๋ค.
- Bunyan: JSON ๊ธฐ๋ฐ ๋ก๊น ํ๋ ์์ํฌ์ ๋๋ค.
- Morgan: Node.js์ฉ HTTP ์์ฒญ ๋ก๊ฑฐ ๋ฏธ๋ค์จ์ด์ ๋๋ค.
10.2 ๋ชจ๋ํฐ๋ง ๋๊ตฌ ์ฌ์ฉ
๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์ํ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ถ์ํ์ธ์. ์ธ๊ธฐ ์๋ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- New Relic: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํฌ๊ด์ ์ธ ๋ชจ๋ํฐ๋ง ํ๋ซํผ์ ๋๋ค.
- Datadog: ํด๋ผ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์ ํ๋ซํผ์ ๋๋ค.
- Prometheus: ์คํ ์์ค ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฒฝ๊ณ ํดํท์ ๋๋ค.
- Sentry: ์ค๋ฅ ์ถ์ ๋ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ํ๋ซํผ์ ๋๋ค.
๊ฒฐ๋ก
์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๋ ๊ฒ์ ํนํ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ํ ๋ด์์ ๊ณ ํ์ง์ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ต์ ECMAScript ํ์ค์ ์์ฉํ๊ณ , ๋ชจ๋์ ์ํคํ ์ฒ๋ฅผ ์ฑํํ๋ฉฐ, ํด๋ฆฐ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํจ๊ณผ์ ์ธ ํ ์คํธ๋ฅผ ์์ฑํ๋ฉฐ, CI/CD๋ก ์ํฌํ๋ก์ฐ๋ฅผ ์๋ํํ๊ณ , ์ฑ๋ฅ์ ์ต์ ํํ๊ณ , ๊ตญ์ ํ ๋ฐ ํ์งํ๋ฅผ ๊ณ ๋ คํ๊ณ , ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ , ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น ์ ๊ตฌํํจ์ผ๋ก์จ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ ์ฑ๊ณต์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ง์์ ์ธ ํ์ต๊ณผ ์ ์์ ๋์์์ด ์งํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์์ ๋๊ฐ๋ ํต์ฌ์ ๋๋ค.